home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.javac;
-
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.util.Enumeration;
- import java.util.Vector;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassFile;
- import sun.tools.java.ClassPath;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
-
- public class Main implements Constants {
- String program;
- OutputStream out;
-
- public Main(OutputStream var1, String var2) {
- this.out = var1;
- this.program = var2;
- }
-
- public void output(String var1) {
- try {
- int var2 = var1.length();
-
- for(int var3 = 0; var3 < var2; ++var3) {
- this.out.write(var1.charAt(var3));
- }
-
- this.out.write(10);
- } catch (IOException var4) {
- }
- }
-
- public void error(String var1) {
- this.output(this.program + ": " + var1);
- }
-
- public void usage() {
- this.output("use: " + this.program + " [-g][-O][-debug][-depend][-nowarn][-verbose][-classpath path][-nowrite][-d dir] file.java...");
- }
-
- public synchronized boolean compile(String[] var1) {
- String var2 = System.getProperty("java.class.path");
- File var3 = null;
- int var4 = 4;
- long var5 = System.currentTimeMillis();
- Vector var7 = new Vector();
- boolean var8 = false;
-
- for(int var9 = 0; var9 < var1.length; ++var9) {
- if (var1[var9].equals("-g")) {
- var4 &= -17;
- var4 |= 8;
- } else if (var1[var9].equals("-O")) {
- var4 &= -9;
- var4 |= 48;
- } else if (var1[var9].equals("-nowarn")) {
- var4 &= -5;
- } else if (var1[var9].equals("-debug")) {
- var4 |= 2;
- } else if (var1[var9].equals("-depend")) {
- var4 |= 32;
- } else if (var1[var9].equals("-verbose")) {
- var4 |= 1;
- } else if (var1[var9].equals("-nowrite")) {
- var8 = true;
- } else if (var1[var9].equals("-classpath")) {
- if (var9 + 1 >= var1.length) {
- this.error("-classpath requires argument");
- this.usage();
- return false;
- }
-
- ++var9;
- var2 = var1[var9];
- } else if (var1[var9].equals("-d")) {
- if (var9 + 1 >= var1.length) {
- this.error("-d requires argument");
- this.usage();
- return false;
- }
-
- ++var9;
- var3 = new File(var1[var9]);
- if (!var3.exists()) {
- this.error(var3.getPath() + " does not exist");
- return false;
- }
- } else {
- if (var1[var9].startsWith("-")) {
- this.error("invalid flag: " + var1[var9]);
- this.usage();
- return false;
- }
-
- if (!var1[var9].endsWith(".java")) {
- this.error("invalid argument: " + var1[var9]);
- this.usage();
- return false;
- }
-
- var7.addElement(var1[var9]);
- }
- }
-
- if (var7.size() == 0) {
- this.usage();
- return false;
- } else {
- if (var2 == null) {
- var2 = ".";
- }
-
- ClassPath var10 = new ClassPath(var2);
- BatchEnvironment var11 = new BatchEnvironment(this.out, var10);
- var11.flags |= var4;
-
- try {
- Enumeration var12 = var7.elements();
-
- while(var12.hasMoreElements()) {
- File var13 = new File((String)var12.nextElement());
-
- try {
- var11.parseFile(new ClassFile(var13));
- } catch (FileNotFoundException var23) {
- ((Environment)var11).error(0, "cant.read", var13.getPath());
- }
- }
-
- ByteArrayOutputStream var30 = new ByteArrayOutputStream(4096);
-
- boolean var14;
- do {
- var14 = true;
- var11.flushErrors();
- Enumeration var15 = var11.getClasses();
-
- while(var15.hasMoreElements()) {
- ClassDeclaration var16 = (ClassDeclaration)var15.nextElement();
- switch (var16.getStatus()) {
- case 0:
- if (!((Environment)var11).dependencies()) {
- break;
- }
- case 3:
- var14 = false;
- var11.loadDefinition(var16);
- if (var16.getStatus() != 4) {
- break;
- }
- case 4:
- var14 = false;
- var30.reset();
- SourceClass var17 = (SourceClass)var16.getClassDefinition(var11);
- var17.compile(var11, var30);
- var16.setDefinition(var17, 5);
- if (!((ClassDefinition)var17).getError() && !var8) {
- String var18 = var16.getName().getQualifier().toString().replace('.', File.separatorChar);
- String var19 = var16.getName().getName().toString() + ".class";
- File var33;
- if (var3 != null) {
- if (var18.length() > 0) {
- var33 = new File(var3, var18);
- if (!var33.exists()) {
- var33.mkdirs();
- }
-
- var33 = new File(var33, var19);
- } else {
- var33 = new File(var3, var19);
- }
- } else {
- ClassFile var21 = (ClassFile)((ClassDefinition)var17).getSource();
- if (var21.isZipped()) {
- ((Environment)var11).error(0, "cant.write", var21.getPath());
- continue;
- }
-
- var33 = new File(var21.getPath());
- var33 = new File(var33.getParent(), var19);
- }
-
- try {
- FileOutputStream var35 = new FileOutputStream(var33.getPath());
- var30.writeTo(var35);
- var35.close();
- if (((Environment)var11).verbose()) {
- this.output("[wrote " + var33.getPath() + "]");
- }
- } catch (IOException var22) {
- ((Environment)var11).error(0, "cant.write", var33.getPath());
- }
- }
- }
- }
- } while(!var14);
- } catch (Error var24) {
- ((Throwable)var24).printStackTrace();
- ((Environment)var11).error(0, "fatal.error");
- } catch (Exception var25) {
- ((Throwable)var25).printStackTrace();
- ((Environment)var11).error(0, "fatal.exception");
- }
-
- var11.flushErrors();
- boolean var29 = true;
- if (var11.nerrors > 0) {
- String var31 = "";
- if (var11.nerrors > 1) {
- var31 = var11.nerrors + " errors";
- } else {
- var31 = "1 error";
- }
-
- if (var11.nwarnings > 0) {
- if (var11.nwarnings > 1) {
- var31 = var31 + ", " + var11.nwarnings + " warnings";
- } else {
- var31 = var31 + ", 1 warning";
- }
- }
-
- this.output(var31);
- var29 = false;
- } else if (var11.nwarnings > 0) {
- if (var11.nwarnings > 1) {
- this.output(var11.nwarnings + " warnings");
- } else {
- this.output("1 warning");
- }
- }
-
- if (((Environment)var11).verbose()) {
- var5 = System.currentTimeMillis() - var5;
- this.output("[done in " + var5 + "ms]");
- }
-
- return var29;
- }
- }
-
- public static void main(String[] var0) {
- Main var1 = new Main(System.out, "javac");
- System.exit(var1.compile(var0) ? 0 : 1);
- }
- }
-